package pe.edu.upc.e41a.javasoft.jsf;

import java.io.Serializable;

import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;

import org.primefaces.context.RequestContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Configurable;
import org.springframework.roo.addon.serializable.RooSerializable;

import pe.edu.upc.e41a.javasoft.domain.TipoPersona;
import pe.edu.upc.e41a.javasoft.domain.Usuario;
import pe.edu.upc.e41a.javasoft.service.UsuarioService;



@Configurable
@ManagedBean(name = "loginBean")
//@SessionScoped
@RequestScoped
@RooSerializable
public class LoginBean implements Serializable {
	

    
   
	
	private static final long serialVersionUID = 1L;
	String nombreUsuario;
	@Autowired
	UsuarioService usuarioService;
    Usuario usuario;
    
    
  
    /*
    public void login(ActionEvent actionEvent) {  
        RequestContext context = RequestContext.getCurrentInstance();  
        FacesMessage msg = null;  
        boolean loggedIn = false;  
          
        Usuario user = new Usuario();
        user= usuarioService.findUsuariosByUsuarioEquals(usuario.getUsuario()); 
        
        if(username != null  && username.equals(usuario.getUsuario()) && password != null  && password.equals(usuario.getClave())) {  
            loggedIn = true;  
            msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Welcome", usuario.getNombres()+" "+usuario.getApellidoPaterno()+" "+usuario.getApellidoMaterno());  
        } else {  
            loggedIn = false;  
            msg = new FacesMessage(FacesMessage.SEVERITY_WARN, "Login Error", "Credenciales incorrectas");  
        }  
          
        FacesContext.getCurrentInstance().addMessage(null, msg);  
        context.addCallbackParam("loggedIn", loggedIn);  
    }  */
    
	@PostConstruct
	public void init() {

	}
	
    public String doLogin(){
    	RequestContext context = RequestContext.getCurrentInstance();  
        FacesMessage msg = null;  
        boolean loggedIn = false;  
          
        Usuario user = new Usuario();
        TipoPersona tipoPersona = new TipoPersona();
        user= usuarioService.findUsuariosByUsuarioEquals(usuario.getUsuario()); 
        tipoPersona=user.getTipoPersona();
        
        
        if(user.getUsuario() != null  && user.getUsuario().equals(usuario.getUsuario()) && user.getClave() != null  && user.getClave().equals(usuario.getClave())) {
        	
            loggedIn = true;  
            
            if(user!=null){
    			HttpSession session = getSession(true);
    			session.setAttribute("usuarioSession", user);
    			session.setAttribute("posicionSession", "1");
    		}
            
            System.out.println("El tipo de persona es: "+tipoPersona.getDescripcion());
            if (tipoPersona.getDescripcion().equalsIgnoreCase("ADMINISTRADOR")) {
            	return "defaultAdmin.xhtml?faces-redirect=true";
			} else {
				System.out.println("Aqui debe llamar a la pagina por defecto del usuario que publica");
				System.out.println("El tipo de persona es: "+tipoPersona.getDescripcion());
				return "defaultOther.xhtml?faces-redirect=true";
			}
            
        } else {
            loggedIn = false;  
            msg = new FacesMessage(FacesMessage.SEVERITY_WARN, "Login Error", "Credenciales incorrectas");  
        }
          
        FacesContext.getCurrentInstance().addMessage(null, msg);  
        context.addCallbackParam("loggedIn", loggedIn);  
        return null;
    }
    
    public String doLogout() {
		HttpSession session = getSession(false);
		session.invalidate();
		return "default.xhtml?faces-redirect=true";
	}

	public Usuario getUsuario() {
		if(usuario==null)
			usuario = new Usuario();
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}
	
	protected HttpSession getSession(boolean sesionNueva) {
		FacesContext facesInstance = FacesContext.getCurrentInstance();
		ExternalContext context = facesInstance.getExternalContext();
		return (HttpSession) context.getSession(sesionNueva);
	}
} 